CyberduckでMFAを利用してS3へ接続するための導入手順まとめ(Windows 10)
こんにちは!コンサル部のinomaso(@inomasosan)です。
S3のオブジェクト(バケットに保存したテキストや動画等のデータ)を操作したい場合、AWSマネジメントコンソールからだとフォルダ単位でダウンロードできません。
AWS CLIのコマンドでフォルダ単位の操作もできますが、非エンジニアの方がS3を利用する場合は敷居が高くなってしまいます。
3rd Party製のアプリケーションであるCyberduckですとグラフィカルに操作できますので、今回はWindows 10での導入方法をまとめてみました。
Cyberduck以外に対応しているツールはないの?
Windows端末をメインで利用されているのであれば、WinSCPもS3に対応しております。
ただWinSCPは後述するMFAに対応していないようでしたので、今回は採用を見送りました。
WinSCPをご利用したい場合は、以下のブログをご参照願います。
構成図
今回導入設定する構成図となります。
ちなみにIAMロールを使用せずIAMユーザーのアクセスキーとシークレットアクセスキーのみで、S3へ接続することも可能です。
ただCyberduckでMFAを利用する場合は、IAMユーザーからIAMロールへのAssumeRoleが必要となります。
AssumeRoleすることでIAMロールの権限を引き受けることができます。
詳細に知りたい方は、以下のお面ブログを見るとイメージで理解することができます。
また、IAMユーザのアクセスキーは永続的な認証情報となるため、外部へ漏洩したい場合の影響が大きかったりします。
一方、IAM Roleの場合は、使用時に一時的なセキュリティ認証情報を生成することができるので、セキュアな運用が可能となります。
AWS側の手順
各リソースの設定ポイントをまとめました。
S3バケット作成
S3バケットはオブジェクトをアップロードするための箱のようなものです。
検証目的でS3への接続を優先して試したい場合は、バケット名以外はデフォルト設定で問題ありません。
誤った操作からオブジェクトを復旧するためのバージョニング設定やオブジェクトの暗号化等は、S3バケット作成後にも設定変更可能です。
IAMポリシー作成
IAMコンソールから、必要なポリシーを作成していきます。
1.MFA+パスワード変更
MFAを設定しないと、MFA設定及びパスワード変更以外の各種アクションの操作が出来ないポリシーとなります。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListActions", "Effect": "Allow", "Action": [ "iam:ListUsers", "iam:ListVirtualMFADevices" ], "Resource": "*" }, { "Sid": "AllowUserToCreateVirtualMFADevice", "Effect": "Allow", "Action": [ "iam:CreateVirtualMFADevice" ], "Resource": "arn:aws:iam::*:mfa/*" }, { "Sid": "AllowManageOwnPasswords", "Effect": "Allow", "Action": [ "iam:ChangePassword", "iam:GetUser" ], "Resource": "arn:aws:iam::*:user/${aws:username}" }, { "Sid": "AllowUserToManageTheirOwnMFA", "Effect": "Allow", "Action": [ "iam:EnableMFADevice", "iam:GetMFADevice", "iam:ListMFADevices", "iam:ResyncMFADevice" ], "Resource": "arn:aws:iam::*:user/${aws:username}" }, { "Sid": "AllowUserToDeactivateTheirOwnMFAOnlyWhenUsingMFA", "Effect": "Allow", "Action": [ "iam:DeactivateMFADevice" ], "Resource": [ "arn:aws:iam::*:user/${aws:username}" ], "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } } }, { "Sid": "BlockMostAccessUnlessSignedInWithMFA", "Effect": "Deny", "NotAction": [ "iam:ChangePassword", "iam:CreateVirtualMFADevice", "iam:EnableMFADevice", "iam:ListMFADevices", "iam:ListUsers", "iam:ListVirtualMFADevices", "iam:ResyncMFADevice", "sts:GetSessionToken" ], "Resource": "*", "Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "false" } } } ] }
2.AssumeRole許可
IAMユーザーのAssumeRoleを許可するポリシーです。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": [ "*" ] } ] }
IAMグループ作成
IAMユーザにIAMポリシーをアタッチすることもできるのですが、将来的な運用で権限の過不足等のミスが発生しやすいです。 そのため、IAMグループでIAMユーザの権限を管理を推奨いたします。
1.IAMポリシーアタッチ
先ほど作成した、MFA+パスワード変更
とAssumeRole許可
をアタッチします。
IAMユーザー作成
1.ユーザの詳細
各ユーザがMFAを設定するためにAWS マネジメントコンソールへのユーザーアクセスを提供するをチェック願います。
2.IAMユーザーをIAMグループに追加
先ほど作成したIAMグループを選択します。
3.MFA設定
IAMユーザを作成後に、以下のブログを参考にMFAを設定願います。
アクセスキーIDとシークレットアクセスキーの認証情報を保管
画面にアクセスキーIDとシークレットアクセスキーが表示されますので、後述するAWS CLIの設定用にメモしておきます。
csvのダウンロード
しておくと確実でしょう。
IAMロール作成
1.信頼されたエンティティを選択
信頼されたエンティティタイプ
にカスタム信頼ポリシーを選択します。
AWSアカウントID
にAssumeRole元のIAMユーザを作成したAWSアカウントIDを入力してください。
このポリシーを設定することで、指定したAWSアカウントのIAMユーザがMFAを利用している場合に、IAMロールの権限を引き受けることができるようになります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<AWSアカウントID>:root" }, "Action": "sts:AssumeRole", "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } } } ] }
2.IAMポリシーアタッチ
許可ポリシー
でS3に対するアクセス権限を追加します。
今回は広めの許可を与えるために、AWSにて既存で用意されているAmazonS3FullAccessを追加します。
クライアント側の手順
AWS CLIインストール
以下のURLを参考にWIndows端末にAWS CLIをインストールします。
AWS CLIのクレデンシャル設定
1.ファイル作成
以下のパスにファイルを作成します。
C:\Users\<ユーザー名>\.aws\credentials
2.credentialsファイル設定
IAMユーザのプロファイル名
とIAMロールのプロファイル名
には、それぞれ任意の名前を入力します。特にこだわりがなければIAMユーザー名と同様にすると管理しやすいかと思います。
アクセスキーIDとシークレットアクセスキーは、IAMユーザー作成時にメモしたものを使用します。
MFAデバイスの割り当てのARNとスイッチしたいIAMロールのARNは、AWSマネジメントコンソールから確認し入力願います、
MFAデバイスの割り当てのARNは認証状号
タブのMFAデバイスの割り当て
記載されています。
(仮想)
の部分は不要となりますので注意願います。
[<IAMユーザのプロファイル名>] aws_access_key_id = <アクセスキーID> aws_secret_access_key = <シークレットアクセスキー> [<IAMロールのプロファイル名>] region = ap-northeast-1 output = json mfa_serial = <MFA デバイスの割り当てのARN> role_arn = <スイッチしたいIAMロールのARN> source_profile = <IAMユーザのプロファイル名>
Cyberduckインストール
以下のサイトからCyberduckをダウンロードし、インストールします。
AssumeRole用のプロファイル保管
以下のリンク先に今回利用するS3 (Credentials from AWS Security Token Service).cyberduckprofile
というプロファイルがありますのでダウンロードします。
以下のパスに先ほどダウンロードしファイルをコピーします。
C:\Program Files\Cyberduck\profiles\S3 (Credentials from AWS Security Token Service).cyberduckprofile
CyberduckでS3へ接続確認
先ほど作成したプロファイルをダブルクリックします。
接続設定が表示されるため、下記の用に設定後に右上のバツボタンから閉じます。
ブックマークが作成されるので、該当のブックマークをダブルクリックします。
MFA認証画面が表示されたら、ワンダイムパスワードを入力し続けるをクリックします。
S3のバケット一覧が表示されれば成功です。
参考
まとめ
CyberduckでMFAを利用してS3へアクセスしたい場合に必要な導入手順のまとめとなります。 IAMの設定周りを含んだ手順が中々見つからなかったので、無いならブログを作成すればいいじゃないの精神で書きました。
この記事が、どなたかのお役に立てば幸いです。それでは!